組件是 Yii 應用程式的主要構建模組。組件是 yii\base\Component 或擴展類別的實例。組件為其他類別提供的三個主要功能是
這些功能單獨或組合使用,使 Yii 類別更具可自訂性且更易於使用。例如,內建的 yii\jui\DatePicker(一個用戶界面組件)可以用於視圖中,以生成互動式日期選擇器
use yii\jui\DatePicker;
echo DatePicker::widget([
'language' => 'ru',
'name' => 'country',
'clientOptions' => [
'dateFormat' => 'yy-mm-dd',
],
]);
由於該類別擴展了 yii\base\Component,因此可以輕鬆寫入小部件的屬性。
雖然組件非常強大,但它們比普通物件稍微笨重,因為特別是支援事件和行為功能需要額外的記憶體和 CPU 時間。如果您的組件不需要這兩個功能,您可以考慮從 yii\base\BaseObject 而不是 yii\base\Component 擴展您的組件類別。這樣做將使您的組件與普通 PHP 物件一樣高效,但增加了對屬性的支援。
當從 yii\base\Component 或 yii\base\BaseObject 擴展您的類別時,建議您遵循這些慣例
$config
參數作為建構子的最後一個參數,然後將此參數傳遞給父類別建構子。init()
方法的開頭調用 init()
的父類別實作。例如
<?php
namespace yii\components\MyClass;
use yii\base\BaseObject;
class MyClass extends BaseObject
{
public $prop1;
public $prop2;
public function __construct($param1, $param2, $config = [])
{
// ... initialization before configuration is applied
parent::__construct($config);
}
public function init()
{
parent::init();
// ... initialization after configuration is applied
}
}
遵循這些指南將使您的組件在創建時可配置。例如
$component = new MyClass(1, 2, ['prop1' => 3, 'prop2' => 4]);
// alternatively
$component = \Yii::createObject([
'class' => MyClass::class,
'prop1' => 3,
'prop2' => 4,
], [1, 2]);
資訊:雖然調用 Yii::createObject() 的方法看起來更複雜,但它更強大,因為它是基於依賴注入容器實現的。
yii\base\BaseObject 類別強制執行以下物件生命週期
$config
進行物件配置。配置可能會覆寫在建構子中設置的預設值。init()
內的後初始化。您可以覆寫此方法以執行健全性檢查和屬性的規範化。前三個步驟都發生在物件的建構子中。這表示一旦您獲得類別實例(即物件),該物件就已經初始化為適當、可靠的狀態。
發現錯字或您認為此頁面需要改進嗎?
在 github 上編輯 !
註冊 或 登入 以發表評論。